package com.studyweb.mapper;

import com.studyweb.pojo.entity.Vocabulary;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 词语积累Mapper接口
 */
@Mapper
public interface VocabularyMapper {
    /**
     * 批量逻辑删除词汇题目
     * @param ids 题目ID列表
     * @return 影响的行数
     */
    int batchDeleteByIds(@Param("ids") List<Long> ids);
    
    /**
     * 添加词语
     * 
     * @param vocabulary 词语实体
     * @return 影响行数
     */
    int insert(Vocabulary vocabulary);
    
    /**
     * 根据ID查询词语
     * 
     * @param id 词语ID
     * @return 词语实体
     */
    Vocabulary selectById(Long id);
    
    /**
     * 更新词语信息
     * 
     * @param vocabulary 词语实体
     * @return 影响行数
     */
    int update(Vocabulary vocabulary);
    
    /**
     * 逻辑删除词语
     * 
     * @param id 词语ID
     * @return 影响行数
     */
    int deleteById(Long id);
    
    /**
     * 查询词语列表
     * 
     * @param offset 偏移量
     * @param pageSize 每页数量
     * @param keyword 关键词
     * @return 词语列表
     */
    List<Vocabulary> selectVocabularies(
        @Param("offset") int offset,
        @Param("pageSize") int pageSize,
        @Param("keyword") String keyword
    );
    
    /**
     * 获取词语总数
     * 
     * @param keyword 关键词
     * @return 总数
     */
    int countVocabularies(
        @Param("keyword") String keyword
    );
    
    /**
     * 查询所有词语列表
     * 
     * @return 词语列表
     */
    List<Vocabulary> selectAllVocabularies();
    
    /**
     * 获取练习词语
     * 
     * @param count 数量
     * @return 词语列表
     */
    List<Vocabulary> selectPracticeVocabularies(
        @Param("count") int count
    );
    
    /**
     * 更新词语掌握程度
     * 
     * @param id 词语ID
     * @param masteryLevel 掌握程度
     * @param reviewCount 复习次数
     * @return 影响行数
     */
    int updateMasteryLevel(
        @Param("id") Long id,
        @Param("masteryLevel") Integer masteryLevel,
        @Param("reviewCount") Integer reviewCount
    );

    /**
     * 批量插入词语
     * @param list 词语列表
     * @return 影响行数
     */
    void insertBatch(@Param("list") List<Vocabulary> list);
}